import {defer, reactive} from "plain-design-composition";

export interface UserInfo {
    username: string,                       // 用户名
    name: string,                           // 用户姓名
    position: string,                       // 职位名称
    avatar: string,
    title: string,
    group: string,
    dept: string,
    gender: string
}

/**
 * 创建一个用户信息管理服务
 * @author  韦胜健
 * @date    2021/2/23 11:21
 */
export function createUserService() {
    let initPromise = null as null | Promise<UserInfo>;
    const service = reactive({
        /**
         * 用户信息
         * @author  韦胜健
         * @date    2021/2/23 11:20
         */
        info: {} as UserInfo,
        /**
         * 更新用户信息，当执行init的时候更新
         * @author  韦胜健
         * @date    2021/2/23 11:21
         */
        update: (data: any) => {
            service.info = data
        },
        /**
         * 清空用户信息
         * @author  韦胜健
         * @date    2021/2/23 11:21
         */
        clear: () => {
            initPromise = null
            service.info = {} as UserInfo
        },
        /**
         * 初始化用户信息
         * @author  韦胜健
         * @date    2021/2/23 11:21
         */
        init: async () => {
            if (!initPromise) {
                const dfd = defer<UserInfo>()
                initPromise = dfd.promise
                try {
                    // const {result} = await http.post('action/base/user/getUserCtx')
                    // 后端根据请求头中的token获取当前用户信息
                    const result = {
                        name: '痞老板很皮',
                        position: 'Project Manager',
                        username: 'admin',
                        avatar: 'https://img-blog.csdnimg.cn/20210507105826971.png#pic_center',
                        title: '造轮小王子',
                        group: '前端通天代技术团队',
                        dept: 'ABC事业群 - DEF平台 - GHI技术部',
                        gender: 'Y',
                    }
                    service.update(result)
                    dfd.resolve(result)
                } catch (e) {
                    alert('初始化用户信息失败！')
                    throw e
                }
            }
            return initPromise
        },
    })
    return service
}